指针小结

1、 声明指针

double * pn;
char * pc;

2、 给指针赋值

double * pn;
double * pa;
char * pc;
double bubble = 3.2;
pn = &bubble;
pc = new char;
pa = new double[30];

3、对指针解除引用

cout << *pn;
*pc = 'S';

另一种对指针解除引用的方法是使用数组表示法,例如,pn[0]与*pn是一样的。绝不要对未被初始化为适当地址的指针解除引用。

4、区分指针和指针所指向的值

如果pt是指向int的指针,则*pt不是指向int的指针,而是完全等同于一个int类型的变量。pt才是指针。

int* pt = new int;
*pt = 5;

5、数组名

在多数情况下,C++将数组名视为数组的第一个元素的地址。
int tacos[10];
一种例外情况是,将sizeof运算符用于数组名时,此时将返回整个数组的长度(单位为字节)。

6、指针算术

C++允许将指针和整数相加。

int tacos[10] = {5, 2, 8, 4, 1, 2, 2, 4, 6, 8};
int* p = tacos;
pt = pt + 1;
int* pe = &tacos[9];
pe = pe - 1;
int diff = pe - pt; // 7

7、数组的动态联编和静态联编

使用数组声明来创建数组时,将采用静态联编。即数组的长度在编译时设置:

int tacos[10];

使用new[]运算符创建数组时,将采用动态联编(动态数组),即将在运行时为数组分配空间,其长度也将在运行时设置。使用完这种数组后,应使用delete[]释放其占用的内存:

int size;
cin >> size;
int* pz = new int[size];
delete [] pz;

8、数组表示法和指针表示法

使用方括号数组表示法等同于对指针解除引用:

数组名和指针变量都是如此,因此对于指针和数组名,即可以使用指针表示法,也可以使用数组表示法。

int* pt = new int[10];
*pt = 5;
pt[1] = 6;
pt[9] = 44;
int coats[10];
*(coats + 4) = 12;
delete [] pt;

🔚